package com.jiyun.controller;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jiyun.pojo.GoodsSell;
import com.jiyun.pojo.JsonRes;
import com.jiyun.service.GoodsService;
import com.jiyun.utils.AliyunOSSClientUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;

/**
 * @author: 刘清芳
 * @description: 商品管理
 * @date: 2023/12/26 10:13
 */
@RestController
@RequestMapping("goods")
public class GoodsController {
    @Autowired
    GoodsService goodsService;
    @PostMapping("findPage1")
    public Page<GoodsSell> findPage1(@RequestBody GoodsSell goodsSell, Integer pageNum, Integer pageSize){
//        Page<GoodsSell> page1 = new Page<>(pageNum, pageSize);
//        LambdaQueryWrapper<GoodsSell> wrapper = new LambdaQueryWrapper<>();
////        商品名称查询
//        wrapper.like(GoodsSell::getGoodsName,goodsSell.getGoodsName());
////        wrapper.eq(GoodsSell::getRemove,1);
//        wrapper.eq(GoodsSell::getGoodsStatus,1);
//        goodsService.page(page1,wrapper);
//        return page1;
        return goodsService.findPage1(goodsSell,pageNum,pageSize);
    }
    @PostMapping("findPage2")
    public Page<GoodsSell> findById2(@RequestBody GoodsSell goodsSell, Integer pageNum, Integer pageSize) {
//        Page<GoodsSell> page2 = new Page<>(pageNum, pageSize);
//        LambdaQueryWrapper<GoodsSell> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(GoodsSell::getRemove, 1);
//        wrapper.eq(GoodsSell::getGoodsStatus, 0);
//        if (goodsSell.getGoodsName() != null) {
//            wrapper.like(GoodsSell::getGoodsName, goodsSell.getGoodsName() + "%");
//        }
//        goodsService.page(page2, wrapper);
//        return page2;
        return goodsService.findById2(goodsSell,pageNum,pageSize);
    }
    /**
     * 添加商品
//     * @param goodsSell 商品销售信息
     * @return JsonRes 返回添加结果
     */
    @PostMapping("addgoods")
    public JsonRes addgoods(@RequestBody GoodsSell goodsSell){
        return goodsService.addgoods(goodsSell);
    }

    //    上传图片
    @PostMapping("/fileUpload")
    public JsonRes fileUpload(MultipartFile file) {
        AliyunOSSClientUtil aliyunOSSClientUtil = new AliyunOSSClientUtil();
        try {
            String s = aliyunOSSClientUtil.uploadImg2Oss(file);
            String imgUrl = aliyunOSSClientUtil.getImgUrl(s);
            return JsonRes.success(imgUrl);
        } catch (Exception e) {
            e.printStackTrace();
            return JsonRes.error("上传失败");
        }
    }

//    删除
    @PostMapping("/del")
    public void delMany(@RequestParam Integer id){
        goodsService.removeById(id);
    }

    @GetMapping("selectAll")
    public List<GoodsSell> selectAll(){
        return goodsService.list();
    }
    @PostMapping("queryAll")
    public List<GoodsSell> queryAll(){
        return goodsService.list();
    }
    //只查询库存为0，并且逻辑删除字段为1的数据
    @PostMapping("findPage3")
    public Page<GoodsSell> findPage3(Integer pageNum, Integer pageSize) {
//        Page<GoodsSell> page3 = new Page<>(pageNum, pageSize);
//        LambdaQueryWrapper<GoodsSell> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(GoodsSell::getGoodsCount, 0);
//        wrapper.eq(GoodsSell::getRemove, 1);
//        goodsService.page(page3, wrapper);
//        return page3;
        return goodsService.findPage3(pageNum,pageSize);
    }


    //只查询商品库存小于20的商品信息
    @PostMapping("findPage4")
    public Page<GoodsSell> findPage4(Integer pageNum, Integer pageSize) {
//        Page<GoodsSell> page4 = new Page<>(pageNum, pageSize);
//        LambdaQueryWrapper<GoodsSell> wrapper = new LambdaQueryWrapper<>();
//        wrapper.lt(GoodsSell::getGoodsCount, 20);
//        wrapper.eq(GoodsSell::getRemove, 1);
//        goodsService.page(page4, wrapper);
//        return page4;
        return goodsService.findPage4(pageNum,pageSize);
    }



    //只查询逻辑字段为0的商品信息
    @PostMapping("findPage5")
    public Page<GoodsSell> findPage5(Integer pageNum, Integer pageSize) {
//        Page<GoodsSell> page5 = new Page<>(pageNum, pageSize);
//        LambdaQueryWrapper<GoodsSell> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(GoodsSell::getRemove, 1);
//        wrapper.eq(GoodsSell::getGoodsStatus, 0);
//        goodsService.page(page5, wrapper);
//        return page5;
        return goodsService.findPage5(pageNum,pageSize);
    }
    /**
     * 批量删除商品
     *
     * @param idArr 商品ID数组
     * @return JsonRes 返回JsonRes对象
     */
    @PostMapping("/delMany")
    public JsonRes batchDelete(@RequestParam Integer[] idArr ) {
        return goodsService.batchDelete(idArr);
    }
//    导出
    @PostMapping("/expload")
    public void exportExcel(HttpServletResponse response)throws IOException {
//        获取商品
        List<GoodsSell> goodsSells = goodsService.list();
//        设置响应头 指定文件名
        response.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode("商品列表展示。xlsx","UTF-8"));
//        关闭连接
        response.setHeader("Connection","close");
//        设置响应头，指定响应内容类型为application/onctet-stream
        response.setHeader("Connection-Type","application/onctet-stream");
//        使用EasyExcel库进行导出
        EasyExcel.write(response.getOutputStream())
//        设置头部信息
                .head(GoodsSell.class)
//                指定导出的文件类型  xlsx
                .excelType(ExcelTypeEnum.XLSX)
//                指定工作表
                .sheet()
//                执行导出操作f
                .doWrite(goodsSells);

    }

    /**
     * 更新商品信息
     *
     * @param goodsSell - 商品信息实体对象
     * @return JsonRes - 返回JsonRes对象
     */
    @PostMapping("updategoods")
    public JsonRes updategoods(@RequestBody GoodsSell goodsSell){
        return goodsService.updategoods(goodsSell);
    }
}
